﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ECommerce.Model.Personas
{
    public class Persona : Objeto
    {
        private string apellido;
        public string Apellido
        {
            get { return this.apellido; }
            set { this.apellido = value; }
        }
        private string nombre;
        public string Nombre
        {
            get { return this.nombre; }
            set { this.nombre = value; }
        }
        private string idGov;
        public string IdGov
        {
            get { return this.idGov; }
            set { this.idGov = value; }
        }
        private string denominaciónSocial;
        public string DenominaciónSocial
        {
            get { return this.denominaciónSocial; }
            set { this.denominaciónSocial = value; }
        }
        private ECommerce.Model.Comunicaciones.Email[] emails;
        public ECommerce.Model.Comunicaciones.Email[] Emails
        {
            get { return this.emails; }
            set { this.emails = value; }
        }
        private ECommerce.Model.Comunicaciones.Teléfono[] teléfonos;
        public ECommerce.Model.Comunicaciones.Teléfono[] Teléfonos
        {
            get { return this.teléfonos; }
            set { this.teléfonos = value; }
        }
        private ECommerce.Model.Seguridad.Perfil[] perfiles;
        public ECommerce.Model.Seguridad.Perfil[] Perfiles
        {
            get { return this.perfiles; }
            set { this.perfiles = value; }
        }
        public override void Load(int ident)
        {
            base.Load(ident);
            this.Id = ident;
            ECommerce.Model.Personas.Persona Persona = ECommerce.DAO.Personas.Persona.GetPersonaById(ident);
            this.Load(Persona);
            if (this.Id == 0)
            {
                this.Id = ident;
                this.Load(Persona);
                this.Emails = ECommerce.DAO.Cache.Comunicaciones.Email.GetEmailsByPersonaId(ident);
                if (this.Emails == null)
                    this.Emails = ECommerce.DAO.SQL.Comunicaciones.Email.GetEmailsByPersonaId(ident);
                this.Teléfonos = ECommerce.DAO.Cache.Comunicaciones.Teléfono.GetTeléfonosByIdPersona(ident);
                if (this.Teléfonos == null)
                    this.Teléfonos = ECommerce.DAO.SQL.Comunicaciones.Teléfono.GetTeléfonosByPersonaId(ident);
                this.Perfiles = ECommerce.DAO.Cache.Seguridad.Perfil.GetPerfilesByPersonaId(ident);
                if (this.Perfiles == null)
                    this.Perfiles = ECommerce.DAO.SQL.Seguridad.Perfil.GetPerfilesByPersonaId(ident);
                ECommerce.DAO.Cache.Personas.Persona.SetPersona(this);
            }
        }
        public void Load(ECommerce.Model.Personas.Persona Persona)
        {
            if (Persona != null)
            {
                base.Load(Persona);
                this.Apellido = Persona.Apellido;
                this.Nombre = Persona.Nombre;
                this.IdGov = Persona.IdGov;
                this.DenominaciónSocial = Persona.DenominaciónSocial;
            }
        }
        public override void Load(System.Data.DataRow dr)
        {
            base.Load(dr);
            ECommerce.Factory.Personas.Persona.Load(this, dr);
            ECommerce.DAO.Cache.Personas.Persona.SetPersona(this);
        }
        public override void Save()
        {
            base.Save();
            this.Id = ECommerce.DAO.SQL.Personas.Persona.SetPersona(this);
            this.Id = ECommerce.DAO.Cache.Personas.Persona.SetPersona(this);
        }
        public void AddEmail(ECommerce.Model.Comunicaciones.Email Email)
        {
            ECommerce.DAO.SQL.Personas.Persona.AddEmailToPersona(Email, this);
            ECommerce.DAO.Cache.Personas.Persona.DelPersona(this);
        }
        public void AddPerfil(ECommerce.Model.Seguridad.Perfil Perfil)
        {
            ECommerce.DAO.SQL.Seguridad.Perfil.AddPerfilToPersona(Perfil, this);
            ECommerce.DAO.Cache.Personas.Persona.DelPersona(this);
            ECommerce.DAO.Cache.Seguridad.Perfil.DelPerfilesByPersonaId(this.Id);
        }
        internal ECommerce.Model.Seguridad.Perfil GetBestPerfil()
        {
            throw new NotImplementedException();
        }


        public void QuitarPerfil(ECommerce.Model.Seguridad.Perfil Perfil)
        {
            ECommerce.DAO.SQL.Seguridad.Perfil.DelPerfilFromPersona(Perfil, this);
            ECommerce.DAO.Cache.Personas.Persona.DelPersona(this);
            ECommerce.DAO.Cache.Seguridad.Perfil.DelPerfilesByPersonaId(this.Id);
        }
    }
}
